home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / umich / utils / desktop / deskac.arc / deskac.st
Text File  |  1989-03-22  |  2KB  |  71 lines

  1. /*
  2. Thought this might be useful for some people.  This seems to be about
  3. the minimum code needed to convert a TOS program to a desk accessory.
  4. Note the "manual" saving and restoring of the menu bar bitmap.
  5. Note that a DA should not use dynamic memory allocation.
  6. (The DA version of GNOME uses a large static array to do its own
  7. internal malloc()ing from.)
  8. Also beware: the "current directory", as the DA sees it, can change
  9. between openings since the current application can change it and GEMDOS
  10. only keeps one "current directory".  Surprisingly, although the desktop
  11. normally makes the top window the current directory, that is not always
  12. the case!
  13.  
  14.     - Moshe Braner
  15. */
  16.  
  17. /*
  18.    This code manually extracted from a program
  19.    that was actually tested with Laser C.
  20. */
  21.  
  22. #include <osbind.h>
  23. #include <obdefs.h>
  24. #include <gemdefs.h>
  25. extern int gl_apid;
  26. int    menu_id, event, ret;
  27. int    xdesk, ydesk, hdesk, wdesk;
  28. int    msgbuff[8];
  29. char    menusave[1520];
  30. main()
  31. {
  32.     int    i;
  33.     char    *cp;
  34.     /* your TOS application's initializations here */
  35.     Cconws ("\033f");    /* disable vt52 cursor    */
  36.     appl_init();
  37.     menu_id = menu_register (gl_apid,"  your DA's name");
  38.     wind_get (0, WF_WORKXYWH, &xdesk, &ydesk, &wdesk, &hdesk);
  39. daloop:
  40.     event = evnt_multi (MU_MESAG,
  41.             0,0,0,0,0,0,0,0,0,0,0,0,0,
  42.             msgbuff,
  43.             0,0, &ret,&ret,&ret,&ret,&ret,&ret);
  44.     /* could have simply used evnt_mesag instead:
  45.         evnt_mesag (msgbuf);        */
  46.     if ((event & MU_MESAG) == 0
  47.         || msgbuff[0] != AC_OPEN
  48.         || msgbuff[4] != menu_id )
  49.             goto daloop;
  50.     graf_mouse(M_OFF,0x0L);
  51.     cp = (char *) Physbase();
  52.     for (i=0; i<1520; i++)
  53.         menusave[i] = *cp++;
  54.     wind_update(TRUE);
  55.     form_dial (FMD_START,
  56.             xdesk, ydesk, wdesk, hdesk,
  57.             xdesk, ydesk, wdesk, hdesk);
  58.     /* enable vt52 cursor if needed */
  59.     /* your TOS application does its thing here */
  60.     /* disable vt52 cursor if on */
  61.     form_dial (FMD_FINISH,
  62.             xdesk, ydesk, wdesk, hdesk,
  63.             xdesk, ydesk, wdesk, hdesk);
  64.     wind_update (FALSE);
  65.     cp = (char *) Physbase();
  66.     for (i=0; i<1520; i++)
  67.         *cp++ = menusave[i];
  68.     graf_mouse(M_ON,0x0L);
  69.     goto daloop;
  70. }
  71.